Date : 29 mars 1990
Programme : DRAGON'S LAIR
Outils : SOURCER, PERISCOPE SOFT, EXEHEAD.
Protection : Mot de passe
Temps pass� : 1 heure environ
Fichier : GAME.EXE
Soci�t� : READY SOFT
Divers :
Origine : SOLO-INDONESIE
Num�ro : 012
Dragon's lair comporte un fichier GAME.EXE qui fait 15k.
Pourtant impossible � charger avec TD ni CV. Pas assez de place
m�moire!.
Avec SOURCER on s'apercoit que le HEADER du fichier � �t� trafiqu�.
afin de r�server plus de m�moire qu'il n'en faut.
Avec EXEHEAD.EXE de MICROSOFT on confirme le fait d'une facon
�crasante, il suffit d'examiner la derni�re ligne:
Magic number: 5a4d ;propre aux *.EXE
Bytes on last page: 0125
Pages in file: 001e
Relocations: 002c
Paragraphs in header: 0020
Extra paragraphs needed: 76fa
Extra paragraphs wanted: ffff
Initial stack location: 798c:1000
Word checksum: 0000
Entry point: 0000:0100 ;CS:IP
Relocation table address: 0022
Memory needed: 491K
Avec PERISCOPE on peut sauter � l'endroit du code, mais on ne peut
pas TRACER le programme d�s la premi�re instruction m�me avec
l'option RUN.COM de PERISCOPE.
Avec le listing que produit SOURCER on s'apercoit en fait que le
programme principal consiste essentiellement en une suite de CALL.
Un "bon" programmeur pas trop vicieux construit son
programme d'une facon structur�e et a ( en principe ) inclus la
recherche de code dans un sous-programme et de pr�f�rence dans le
premier CALL. L'id�e vient donc tout naturellement de commencer �
"travailler" ce premier CALL, mais voil� impossible de d�marrer ce
programme � sa premi�re instruction....
Il existe pourtant une solution avec ce bon vieux PERISCOPE;
- lancer PERISCOPE normalement,
- lancer RUN sans parametres,
- charger le programme GAME.EXE comme un fichier sans l'executer en
tapant N GAME.EXE puis LF,
- lire le segment de donn�e et rajouter 10h, ceci permet pour un
fichier EXE de pointer directement sur le premier octet du PSP du
fichier.
Une v�rification simple est de s'assurer que l'on y trouve bien
5A4D signature propre � tout les fichiers EXE.
- DW DS:00 ----> 5A4D
- dumper la position 08h ( taille du HEADER du programme )
- DW DS:08 ----> XXXX
- dumper la position 16h ( adresse du d�but du segment CODE )
- DW DS:16 ----> YYYY
- dumper la position 14h ( IP )
- DW DS:14 ----> ZZZZ
- chercher la premi�re instruction en faisant E DS+XXXX+YYYY:ZZZZ
et remplacer la valeur par CC ( int 3 ).
- r��crire le fichier ainsi modifi� sur le disque par WF,
- quitter PERISCOPE et lancer GAME.EXE....
.... le control est rendu � PERISCOPE d�s la premi�re instruction
de GAME.EXE!
On fait du TRACE jusqu'au premier CALL qu'on ignore superbement par
3 NOP ( 909090 ) assembl�s ON-LINE et.... BINGO!
Il ne reste plus qu'� faire la modif avec PCTOOLS,
Dans la s�rie de sauts: E82736
E87F27
E87E1D
E87814
Remplacer la premi�re s�rie par 909090.
Ci dessous le listing comment� de PERISCOPE, la commande /E est �
ignorer; elle permet juste de transferer tout ce qui apparait sur
l'�cran de PERISCOPE sur un fichier disque.
/E>n game.exe ; Donne le nom du fichier sur
; lequel on va travailler.
/E>lf ; Charge le fichier GAME.EXE
/E>rds ; On ajuste DS � +10h.
DS 233F
:ds+10
/E>dw ds:8l1 ; Dump de la taille du HEADER
234F:0008 0020 ; en paragraphes du programme.
/E>dw ds:16l1 ; Dump de CS.
234F:0016 0000
/E>dw ds:14l1 ; Dump de IP.
234F:0014 0100
/E>e ds+0020+0000:0100 ; Recherche de la premi�re
; adresse du programme.
236F:0100 1E.CC ; On remplace par INT 3 CCh
/E>wf ; On r��crit le fichier sur le
; disque pour l'executer.
Un d�ssassemblage � partir de l'adresse calcul�e plus haut montre
que l'on se trouve effectivement dans le programme. ( une fois
execut� ). A cet endroit on r��crit l'instruction d'origine ( 1E )
pour faire du trace.
( pour un programme COM la m�thode est beaucoup plus simple...
> N XXX.COM
> LF
> E DS:100 ).
Listing;
/E>u
236F:0100 CC INT 3 ; d�but du programme...
236F:0101 33C0 XOR AX,AX
236F:0103 50 PUSH AX
236F:0104 8CC8 MOV AX,CS
236F:0106 8ED8 MOV DS,AX
236F:0108 2E CS:
236F:0109 C6066D1D01 MOV BYTE PTR [1D6D],01
236F:010E 2E CS:
236F:010F C606BA0801 MOV BYTE PTR [08BA],01
236F:0114 90 NOP
236F:0115 90 NOP
236F:0116 90 NOP
236F:0117 E87F27 CALL 2899 ; s�ries de CALL...
236F:011A E87E1D CALL 1E9B .
236F:011D E87814 CALL 1598 .
236F:0120 E87A2D CALL 2E9D .
236F:0123 E82321 CALL 2249 .
236F:0126 E83704 CALL 0560 .
236F:0129 E87E23 CALL 24AA .
236F:012C E80C00 CALL 013B .
236F:012F E89A23 CALL 24CC .
236F:0132 E8902D CALL 2EC5 .
236F:0135 B80300 MOV AX,0003
236F:0138 CD10 INT 10
236F:013A CB RETF ; fin du programme....
|